package com.delio.server.produccion.recetas;

import java.sql.SQLException;
import java.util.List;

import com.delio.client.produccion.detallerecetas.DetalleReceta;
import com.delio.client.produccion.recetas.Receta;
import com.delio.client.produccion.recetas.RecetaService;
import com.delio.server.base.Conexion;
import com.delio.server.base.util.GxtGridPaginate;
import com.extjs.gxt.ui.client.data.BasePagingLoadResult;
import com.extjs.gxt.ui.client.data.FilterPagingLoadConfig;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.ibatis.sqlmap.client.SqlMapClient;

public class RecetaServiceImpl extends RemoteServiceServlet
implements RecetaService{
	
	private static final long serialVersionUID = 1L;
	
	static SqlMapClient sqlMap = Conexion.getSqlMap();

	
	@SuppressWarnings("unchecked")
	@Override
	public PagingLoadResult<Receta> paginateReceta(
			FilterPagingLoadConfig config) {
	
		GxtGridPaginate paginate = new GxtGridPaginate();
		paginate.config = config;
		paginate.setLimit();
		if(paginate.order.equals("")){
			paginate.order = " order by id desc";
		}
		List<Receta> data = null;
		System.out.println("esta fuera del try");
		try {
			data = sqlMap.queryForList("paginateReceta", paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return new BasePagingLoadResult<Receta>(data, paginate.offset, count(paginate));
	}
   
	public Integer count(GxtGridPaginate paginate){
		Integer count = null;
		try {
			count = (Integer) sqlMap.queryForObject("countReceta", paginate);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return count;
	}
	
	
	public boolean guardar(Receta r) {
	  boolean var = false;
	    try{
		  sqlMap.insert("insertReceta",r);
		  var = true;
	    }catch(Exception e){
		  e.printStackTrace();
		}
	 return var;
	}

	public boolean eliminar(Integer id) {
		boolean var = false;
		try{
			sqlMap.delete("deleteReceta",id);
			var = true;
		}catch(Exception e){
			e.printStackTrace();
		}
		return var;
	}

	public boolean actualizar(Receta r) {
		boolean var = false;
		
		try{
		   sqlMap.update("updateReceta",r);
		   var = true;	
		}catch(Exception e){
			e.printStackTrace();
		}
		return var;
	}

	@SuppressWarnings("unchecked")
	public List<Receta> ListarRecetas(Integer id) {
		List<Receta> lr = null;
		try{
			lr = sqlMap.queryForList("ListRecetaes",id);
		}catch(Exception e){
			e.printStackTrace();
		}
		return lr;
	}

	@SuppressWarnings("unchecked")
	public List<Receta> ListarRecetas() {
		List<Receta> lr = null;
		System.out.println("entro en listarReceta");
		try{
			lr = sqlMap.queryForList("ListRecetaCombo");
		}catch(Exception e){
			e.printStackTrace();
		}
		return lr;
	}

	@Override
	public boolean guardar(Receta r, List<DetalleReceta> ldr) {
	 boolean var = true;
	 Integer cantidad=-1;
	 
	   try{
	 	  Integer idarticulopadre =  r.getArticulopadre_id();
		  cantidad = (Integer)sqlMap.queryForObject("selectCount",idarticulopadre); 
		  System.out.println("cantidad de items"+cantidad);
	   }catch(Exception e){
		  e.printStackTrace();
	   }
	 
	if(cantidad==0){
	  try{	
		sqlMap.startTransaction();  
		
	    try{
		   sqlMap.insert("insertRecetaReturnId", r);  
		   Integer receta_id = r.getId();
	 
		  for(DetalleReceta dr : ldr){
			 dr.setReceta_id(receta_id);
			 sqlMap.insert("insertDetalleRecetas", dr);
	      }
	    }catch(Exception e){
	      var=false;
	      e.printStackTrace();
	    }
	    if(!var)
	    sqlMap.endTransaction();
	  }catch(Exception e){
		  var=false;
		  e.printStackTrace();
	  }
	  if(var){
		 try{ 
		  sqlMap.commitTransaction();
		 }catch(Exception e){
			e.printStackTrace();
		 }
      }
	 }else
	   return false;	  
	  return var;
	 
   }
}